import Config from '@/config.js';   
var apis={};
 
/**
  * @param {Object} key 键名，不传value时为获取值，默认会调用一次JSON.parse
  * @param {Object} value 要缓存的值，字符串或json或数组
  * @param {Object} expire 缓存时间（秒）
  */
apis.cache=function(key,value,expire){
	key=Config.prefix+key;
	var now=Date.parse(new Date())/1000;
	if(value!=undefined){//缓存数据
		if(value==null||value==""){
			uni.removeStorageSync(key);
		}else{
			
			var expire_at=parseInt(expire)>0?(parseInt(expire)+now):0; 
			uni.setStorageSync(key,{
				data:value,expire:expire_at
			})
		}
		return true;
	}else{//获取缓存
		
		var data=uni.getStorageSync(key);
		if(data==null||data=='')return data;
		try{
			if(parseInt(data.expire)>0){
				if(data.expire>=now){
					return data.data;
				}
				return "";
			}else{
				return data.data;
			}  
		}catch(e){
		
		}
		return data.data; 
	}
}
apis.request=function(url,params) {  
    var url0 = "", that = this; 
	var options=params||{};
    if (typeof (url) != "string") { //第一个参数传的不是url，这里是为了兼容原生uni写法
		options=url;
		if (options.url.indexOf("http")==0) {//自定义url
			url0 = url; 
		}else{
			url0 = Config.url + options.url;
		}
    } else {
		url0 =Config.url + url;
		if (url.indexOf("http")==0) {//自定义url
			url0 = url;
		}
    }
	var header = {
		//后台请求跨域时，设置为简单请求避免提交2次
		//"Content-Type":"application/x-www-form-urlencoded"
	};
	if(typeof(options.header)!="undefined"){
	  header=options.header;
	}
	 
	/* token 验证 */
	let token = this.cache("token");
	if (token!=''&&token!=null) {
	   header.token =  token ;
	}  
	
	// #ifdef MP-WEIXIN	
	console.log("发送请求："+url,options.data||{})
	// #endif	
	if(typeof(options.success)!='function'){
		return new Promise((resolve, reject) => {
			uni.request({
				url: url0, 
				data: options.data || {}, //请求参数
				header: header,
				method: options.method || 'POST', //默认为POST,可以不写，如常用请求格式为POST，可以设置POST为默认请求方式
				dataType: options.dataType || 'json', //返回的数据格式,默认为JSON，特殊格式可以在调用的时候传入参数
				success: (res) => {
					if (res && res.cookies&&res.cookies.length>0) {//保存cookie
						uni.setStorageSync('cookie', res.cookies[0]);   //保存Cookie到Storage
					} 
					if(Config.console){
						console.log("响应内容：",res.data)
					}  
					resolve(res.data);
				},
				fail: (err) => { 
					reject(err)
				}
			})
		});
	}else{//兼容旧版本及小程序、uniapp的原生写法
		uni.request({
			url: url0, 
			data: options.data || {}, //请求参数
			header: header,
			method: options.method || 'POST', //默认为POST,可以不写，如常用请求格式为POST，可以设置POST为默认请求方式
			dataType: options.dataType || 'json', //返回的数据格式,默认为JSON，特殊格式可以在调用的时候传入参数
			success: (res) => {
				if (res && res.cookies&&res.cookies.length>0) {//保存cookie
					uni.setStorageSync('cookie', res.cookies[0]);   //保存Cookie到Storage
				} 
				if(Config.console){
					console.log("响应内容：",res.data)
				}  
				options.success(res.data);
			},
			fail: (err) => {
				console.log("请求异常",err)
				if(options.fail){
					options.fail(err)
				}
			}
		})
	}
 }
 /**
  * @param {Object} url  上传地址
  * @param {Object} files  本地文件 res.templatePath
  */
apis.upload=function(url0,files,formData) { 
	if (url0.indexOf("http")!=0) {//统一的url
		url0 = Config.url + url0;
	} 
	return new Promise((resolve, reject) => {
		var result=new Array();//上传成功的
		var header = {	 
		};  
		/* token 验证 */
		let token = this.cache("token");
		if (token!=''&&token!=null) {
		   header.token =  token ;
		}  
		
		//后台请求跨域时，设置为简单请求避免提交2次，自定义header字段要与后台一致
		//header['Content-Type']="multipart/form-data";
		
		files.forEach(function(fileUrl,index){
			uni.uploadFile({
				url:url0,
				header:header||{},
				filePath: fileUrl,
				formData: formData||{},
				name: 'file',
				success: (res) => {
					let data = JSON.parse(res.data);
					if (data.code == 200||data.code == 0) {
						result.push(data);
						if(result.length==files.length){
							resolve(result)
						}
					} else {
						reject(data)
					}
				},
				fail: (res)=>{
					reject(data);
				}
			})
		});
		
	})
}

module.exports = apis;
